package com.allwees.bs.c.module.user.service;

import com.allwees.bs.c.module.user.dto.RegionDto;
import com.allwees.bs.c.module.user.dto.ShippingAddressDTO;
import com.allwees.bs.c.module.user.dto.UserDto;
import com.allwees.bs.c.module.user.req.RegionReq;
import com.allwees.bs.c.module.user.req.ShippingAddressReq;
import com.allwees.bs.c.module.user.req.ShippingAddressUpdateDefaultReq;
import com.allwees.bs.c.module.user.req.VisitorShippingAddressReq;
import com.allwees.bs.core.modelbase.page.PaginateDTO;

import java.util.List;
import java.util.Map;

public interface IShippingAddressService {
    /**
     * 添加收货地址
     * @param userUuid 调用接口的用户ID
     * @param shippingAddressVo 收货地址信息
     * @return 新增的收货地址，数据传输对象
     */
    ShippingAddressDTO addShippingAddress(String userUuid, ShippingAddressReq shippingAddressVo);

    /**
     * 获取指定收货地址
     * 需要收货地址的ID和用户自身的ID相同
     * @param userUuid 调用接口的用户ID
     * @param addressUuid 收货地址ID
     * @return 收货地址
     */
    ShippingAddressDTO getShippingAddress(String userUuid, String addressUuid);

    /**
     * 直接获取默认收货地址，不需要ID
     * @param userUuid 调用接口的用户ID
     * @return 收货地址
     */
    ShippingAddressDTO getDefaultShippingAddress(String userUuid);

    /**
     * 获取指定用户的所有收获地址
     * 不直接翻页
     * @param userUuid 调用接口的用户ID
     * @return 收货地址翻页对象
     */
    PaginateDTO<ShippingAddressDTO> getAllShippingAddress(String userUuid);

    /**
     * 更新收货地址
     */
    ShippingAddressDTO updateShippingAddress(String userUuid, String addressUuid, ShippingAddressReq shippingAddressVo);

    /**
     * 删除收货地址
     * 软删除
     * 无返回
     */
    void deleteShippingAddress(String userUuid, String addressUuid);

    /**
     *
     * @param req
     * @return
     */
    UserDto visitorAddShippingAddress(VisitorShippingAddressReq req);

    /**
     *
     * @param userUuid
     * @param addressUuid
     * @param req
     */
    void updateDefault(String userUuid, String addressUuid, ShippingAddressUpdateDefaultReq req);

    List<RegionDto> findSubRegionList(RegionReq regionReq);
}
